
class Container {
    //使用类的静态方法，of替代了new Container的作用
    static of (value) {
      return new Container(value)
    }
    constructor (value) {
      this._value = value
    }
    
    map (fn) {
      return Container.of(fn(this._value))
    }
}

class MayBe {
    static of (value) {
      return new MayBe(value)
    }
    constructor (value) {
      this._value = value
    }
  
    map(fn) {
      // 判断一下value的值是不是null和undefined，如果是就返回一个value为null的函子，如果不是就执行函数
      return this.isNothing() ? MayBe.of(null) : MayBe.of(fn(this._value))
    }
  
    // 定义一个判断是不是null或者undefined的函数，返回true/false
    isNothing() {
        return this._value === null || this._value === undefined
    }
}


module.exports = { 
    Container,
    Maybe: MayBe 
}